/*
* 根据ID获取对象并返回
* */
function my$(id) {
    return document.getElementById(id);
}
/*
* 设置元素内部文本
* */
function setInnerText(element,text) {
    if(typeof element.textContent == "undefined"){
        element.innerText=text;
    }else{
        element.textContent=text;
    }
}
/*
* 得到元素内部文本
* */
function getInnerText(element) {
    if(typeof element.textContent == "undefined"){
        return element.innerText;
    }else{
        return element.textContent;
    }
}
/*
*兼容IE的 获取第一个子标签的方法
* */
function getFirstElementChild(element) {
    if(element.firstElementChild){
        return element.firstElementChild;
    }else{
        var node=element.firstChild;
        while(node&&node.nodeType!=1){  //子节点存在 且 节点类型不是标签 就继续找
            node=node.nextSibling;
        }
        return node;
    }
}

/*
* 兼容IE的 得到下一个元素的方法 getNextElementSibling（）
* */
function getNextElementSibling(element) {
    if(element.nextElementSibling){
        return element.nextElementSibling;
    }else{
        var node=element.nextSibling;
        while(node&&node.nodeType!=1){
            node=node.nextSibling;
        }
        return node;
    }
}
/*
* 兼容IE的 得到上一个元素的方法 getPreviousElementSibling（）
* */
function getPreviousElementSibling(element) {
    if(element.previousElementSibling){
        return element.previousElementSibling;
    }else{
        var node=element.previousSibling;
        while(node&&node.nodeType!=1){
            node=node.previousSibling;
        }
        return node;
    }
}

/*
*兼容IE的 获取最后一个子标签的方法
* */
function getLastElementChild(element) {
    if(element.lastElementChild){
        return element.lastElementChild;
    }else{
        var node=element.lastChild;
        while(node&&node.nodeType!=1){  //子节点存在 且 节点类型不是标签 就继续找
            node=node.previousSibling;
        }
        return node;
    }
}

/*
* 绑定事件的兼容函数
* */
function addEventListener(element,type,fun) {   //判断方法是否存在 对象.方法名
    if(element.addEventListener){
        element.addEventListener(type,fun,false);
    }else if(element.attachEvent){
        element.attachEvent("on"+type,fun);
    }else{
        element["on"+type]=fun;
    }
}

/*
* 解绑事件的兼容函数
* */
function removeEventListener(element,type,fun) {   //判断方法是否存在 对象.方法名
    if(element.removeEventListener){
        element.removeEventListener(type,fun,false);
    }else if(element.detachEvent){
        element.detachEvent("on"+type,fun);
    }else{
        element["on"+type]=fun;
    }
}

/*
* 阻止冒泡的兼容代码
* */
function stopPropagation(e) {
    if(e){
        e.stopPropagation();   //谷歌火狐的
    }else{
        window.event.cancelBubble;  //ie的
    }
}

/*
* 水平位置移动到函数  匀速
* */
function animate(element,target) {
    window.clearInterval(element.timeId);
    element.timeId=window.setInterval(function () {
        var current=element.offsetLeft;
        var step=4;
        step=current>target?-step:step;
        var nextCurrent = current+step;
        if(Math.abs(current-target)>Math.abs(step)){
            element.style.left=nextCurrent+"px";
        }else{
            element.style.left=target+"px";
            window.clearInterval(element.timeId);
        }

    },10)
}

/*
* 水平位置变速移动到动画函数
* */
function animateS(element,target) {
    clearInterval(element.timeId);
    element.timeId=setInterval(function () {
        var current=element.offsetLeft;
        var step=(target-current)/10;
        step=step>0?Math.ceil(step):Math.floor(step);
        current+=step;
        element.style.left=current+"px";
        if(current==target){
            clearInterval(element.timeId);
        }
        console.log("目标位置:"+target+"当前位置:"+current+"前进步数："+step);
    },20)
}


/*
* 动画最终版  带回调函数
* 改变元素多个 有尺寸的属性值 +opacity +zIndex
* */
function animateFinally(element,json,fn) {
    clearInterval(element.timeId);
    element.timeId=setInterval(function () {
        var flag=true;
        for( var attr in json){

            if(attr=="opacity"){
                var current=getStyle(element,attr)*100;
                var target=json[attr]*100;
                var step=(target-current)/10;
                step=step>0?Math.ceil(step):Math.floor(step);
                current+=step;
                element.style[attr]=current/100;
            }else if(attr=="zIndex"){
                element.style[attr]=json[attr];
            }else{
                var current=parseInt(getStyle(element,attr));
                var target=json[attr];
                var step=(target-current)/10;
                step=step>0?Math.ceil(step):Math.floor(step);
                current+=step;
                element.style[attr]=current+"px";
            }
            if(target!=current){
                flag=false;
            }
        }
        if(flag){
            clearInterval(element.timeId);
            if(fn){
                fn();
            }
        }
    },20)
}

/*
* 得到浏览器的滚动条 溢出的像素
* */
function getScroll() {
    return {
        left:window.pageXOffset || document.documentElement.scrollLeft ||
        document.body.scrollLeft || 0,
        top: window.pageYOffset || document.documentElement.scrollTop ||
        document.body.scrollTop || 0
    };
}

//事件对象  window.event（IE） 和 ev (火狐)  不兼容
//可视区属性 clientX clientY 大家都兼容
//文档区属性 pageX pageY  IE不兼容(只能间接用clientX+getScroll().left 得到)
//以上兼容代码封装在对象中
var evt={
    //得到事件对象
    getEvent:function (evt) {
        return window.event || evt ;
    },
    //得到可视区
    getClientX:function (evt) {
        return this.getEvent(evt).clientX ;
    },
    getClientY:function (evt) {
        return this.getEvent(evt).clientY ;
    },
    //得到滚轮隐藏区对象
    getScroll:function getScroll() {
        return {
            left:window.pageXOffset || document.documentElement.scrollLeft ||
            document.body.scrollLeft || 0,
            top: window.pageYOffset || document.documentElement.scrollTop ||
            document.body.scrollTop || 0
        };
    },
    //得到文档区
    getPageX:function (evt) {
        return this.getEvent(evt).pageX?this.getEvent(evt).pageX:(this.getClientX()+getScroll().left);
    },
    getPageY:function (evt) {
        return this.getEvent(evt).pageY?this.getEvent(evt).pageY:(this.getClientY()+getScroll().top);
    }
}

/*
* 获得样式属性的兼容代码
* 返回指定属性值的 字符串形式
* */
function getStyle(element,attr) {
    return window.getComputedStyle?
        window.getComputedStyle(element,null)[attr]:  //谷歌 火狐
        element.currentStyle[attr];         //IE
}

